/*
 * main.cpp
 *
 *  Created on: 29/09/2011
 *      Author: diego
 */

using namespace std;
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
#include "Clases/Controlador.h"
#include "Clases/Configuracion.h"
#include "Clases/ArbolB.h"

void printHelp() {
	cout << "Modo de Uso:" << endl;
	cout << "  main [opciones]" << endl << endl;
	cout << "Opciones:" << endl;
	cout
			<< "  -i [directorio]    Indexa recursivamente todos los documentos del directorio."
			<< endl;
	cout
			<< "  -q [consulta]      Retorna los documentos mas relevantes para la consulta."
			<< endl;
	cout << "  -f                 Borra el todo el indice." << endl;
	cout << "  --start-server     Inicia el servidor de consultas." << endl;
	cout << "  --stop-server      Detiene el servidor de consultas." << endl;
	cout << "  --restart-server   Reinicia el servidor de consultas." << endl;
	cout << "  -v                 Imprime la version del indexador." << endl;
	cout << "  -h                 Imprime este mensaje de ayuda." << endl;
	return;
}

void printVersion() {
	cout << "75.06 - TP: Indexador, Versión 1.00" << endl;
	return;
}

void printindex() {
	ArbolB arbol;
	arbol.print();

	string termino = "";
	while (termino != "quit") {
		cout << "Ingrese palabra: ";
		cin >> termino;
		cout << arbol.buscar(termino) << endl;
	}
}

int main(int argc, char* argv[]) {
/*
	 Configuracion* conf = Configuracion::getConf(PATH_CONF);
	 cout << "max mem: " << conf->max_mem_indexdor() << endl;
	 cout << "front coding: " << conf->front_coding() << endl;
	 cout << "path indice: " << conf->path_indice() << endl;
	 cout << "path documentos: " << conf->path_documentos() << endl;
	 cout << "path stopwords: " << conf->path_stopwords() << endl;
	 cout << "host: " << conf->host_addr() << endl;
	 cout << "post: " << conf->port_number() << endl;

	 return 0;
*/
	Controlador* controlador = new Controlador();

//	try {
	if (argc < 2) {
		printHelp();
	}
	string op(argv[1]);
	string path;

	if (op == "-i") {
		if (argc == 3) {
			if (argv[2] == NULL) {
				controlador->indexar("");
			} else {
				controlador->indexar(string(argv[2]));
			}
		} else {
			printHelp();
		}
	} else if (op == "-q") {
		string query = string(argv[2]);
		for (int i = 3; i < argc; i++) {
			query += " " + string(argv[i]);
		}
		controlador->buscar(query);
	} else if (op == "--start-server") {
		if (argc == 2) {
			controlador->startServer();
		} else {
			printHelp();
		}
	} else if (op == "--stop-server") {
		if (argc == 2) {
			controlador->stopServer();
		} else {
			printHelp();
		}
	} else if (op == "--restart-server") {
		if (argc == 2) {
			controlador->restartServer();
		} else {
			printHelp();
		}
	} else if (op == "-f") {
		if (argc == 2) {
			controlador->flushIndex();
		} else {
			printHelp();
		}
	} else if (op == "-h") {
		if (argc == 2) {
			printHelp();
		}
	} else if (op == "-v") {
		if (argc == 2) {
			printVersion();
		}
//		TEST temporal, borrar luego
	} else if (op == "-test") {
		printindex();
	} else {
		printHelp();
	}
//	}catch (exception& e) {
//		cout << e.what() << endl;
//	}

	delete controlador;

	return 0;
}
